草庐IT

java - 覆盖情况下的异常

全部标签

ruby-on-rails - 如何使用 ActiveRecord 3.1 在不停机的情况下删除列?

在使用ActiveRecord运行应用程序时从表中删除列会导致错误,因为ActiveRecord会缓存列名。其他版本的ActiveRecord的解决方法是覆盖模型中的#columns方法并在迁移前过滤掉不推荐使用的列名称(基本上-对AR隐藏这些列)。这是有效的,因为所有与列名相关的方法都基于#columns调用在ActiveRecord3.1中,表结构的缓存被移至ConnectionPool,并且所有与列名相关的值(例如coluumns_hash)都被独立缓存(3.2使用ModelSchema.columns使其再次工作)在ActiveRecord3.1中是否有任何方法(除了具体适配器

ruby - 重开Ruby嵌套模块异常

为什么重新打开嵌套模块会根据使用的语法给出不同的结果?例如,这很好用:moduleAmoduleEendendmoduleAmoduleEdefE.eendendend但是这个:moduleAmoduleEendendmoduleA::EdefE.eendend给出错误:reopen.rb:6:in`':uninitializedconstantA::E::E(NameError)fromreopen.rb:5:in`'(在有人指出这一点之前,解决方法是在定义E.e时使用self而不是模块名称,但这不是本文的重点。) 最佳答案 mo

ruby - 我如何让 ruby​​ 在线程内输出异常?

当我使用Thread.new{}生成一个线程时,该线程中发生的任何异常似乎永远不会出现,应用程序只是悄悄地忽略它 最佳答案 通常情况下,线程是相互隔离的,因此一个线程中的异常不会终止整个应用程序。但是,虽然我从未使用过它们,但Thread类有几个abort_on_exception方法,甚至还有一些示例。他们应该做你想做的事。http://corelib.rubyonrails.org/classes/Thread.html 关于ruby-我如何让ruby​​在线程内输出异常?,我们在S

ruby-on-rails - 如何在不渲染的情况下从 ERB 代码块中产生?

考虑以下几点:view.html.erb:stressedhelper.rb:defmake_backwardsyield.reverseendView呈现stresseddesserts而不仅仅是desserts。如何在不渲染代码块的情况下使用yield中的内容? 最佳答案 ERB有一个内部缓冲区,这使得block的使用有点复杂,正如您在代码示例中看到的那样。Rails提供了一个capture方法,它允许您在此缓冲区中捕获字符串并从block中返回它。因此您的助手将变成以下内容:defmake_backwardscapturedo

Ruby 等同于 C#'s ' yield' 关键字,或者,在不预分配内存的情况下创建序列

在C#中,您可以这样做:publicIEnumerableGetItems(){for(inti=0;i这将返回一个包含1000万个整数的可枚举序列,而无需在该长度的内存中分配一个集合。有没有一种方法可以在Ruby中做同样的事情?我要处理的具体示例是将矩形数组展平为要枚举的值序列。返回值不必是Array或Set,而是某种只能按顺序而不是索引迭代/枚举的序列。因此,整个序列不需要同时分配到内存中。在.NET中,这是IEnumerable和IEnumerable.对Ruby世界中此处使用的术语的任何澄清都会有所帮助,因为我更熟悉.NET术语。编辑也许我最初的问题还不够清楚——我认为yiel

ruby - 在 Ruby 中覆盖方法调用?

我试图在调用特定类的任何方法时获得回调。覆盖“发送”不起作用。似乎send在正常的Ruby方法调用中没有被调用。举个例子。classTestdefself.items@items||=[]endend如果我们在Test上覆盖发送,然后调用Test.items,则不会调用发送。我想做的事情可行吗?我宁愿不使用set_trace_func,因为它可能会大大减慢速度。 最佳答案 使用alias或alias_method:#thecurrentimplementationofTest,definedbysomeoneelse#andfort

ruby - 处理并发 ruby​​ 线程池中的异常

如何处理并发ruby​​线程池中的异常(http://ruby-concurrency.github.io/concurrent-ruby/file.thread_pools.html)?例子:pool=Concurrent::FixedThreadPool.new(5)pool.postdoraise'somethinggoeswrong'end#howtorescuethisexceptionhere更新:这是我的代码的简化版本:defprocesspool=Concurrent::FixedThreadPool.new(5)products.eachdo|product|new_

ruby - 有没有办法在不加载rubygems的情况下调用ruby1.9?

所以ruby​​1.9非常好,因为它会自动需要ruby​​gems,因此当你调用require'somegem'而不首先需要ruby​​gems时它会工作,这通常很棒。但我有大量使用ruby​​的shell脚本,它们通常不依赖ruby​​gems。Shell工具应该立即运行,而加载ruby​​gems是一个主要的拖累,主要是因为它涉及一堆磁盘操作和分散的小文件。我希望能够在运行这些shell脚本时告诉ruby​​跳过加载gem。理想情况下,在shebang行中使用类似#!ruby--no-rubygems的内容。有这样的事吗?或者也许必须手动要求一个编译选项来告诉ruby​​ruby​

ruby - RSpec 2 的 RCov 未正确检测覆盖范围? (不是 Rails!)

前言我刚刚开始接触Ruby,不仅尝试学习语言,还尝试学习一些开发策略。作为初学者,我专注于测试和行为驱动开发。(是的,我两者都做是为了比较)我正在使用的小型软件项目单元测试(TDD)cucumber(BDD)Rspec(TDD和BDD)在不同的地方,我遇到了RCov作为一种工具,它告诉我我实际测试了多少实际代码。我在我的Rakefile中设置了以下RakeTask,用于单元测试的协方差分析:desc"RunRCovtogetcoverageofUnitTests"Rcov::RcovTask.new(:rcov_units)do|t|t.pattern='tests/**/tc_*.r

ruby-on-rails - 如何获取异常以呈现 Rails 开发错误页面的纯文本版本?

我正在使用rails-api构建一个没有网络界面的API。当我在开发中遇到错误时,我希望只看到纯文本的错误消息和堆栈跟踪,而无需所有HTML包装。我如何覆盖全局异常处理,以便它在开发模式下以纯文本/JSON呈现堆栈跟踪,并在生产环境中呈现一般错误消息? 最佳答案 从安全的角度来看,我建议在生产代码中包含堆栈跟踪可能不是一个好主意。下面是我的做法:render:json=>{message:exception.message,stack_trace:exception.stacktrace}希望对您有所帮助。在Sam的澄清之后我可以添